/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package EJB;

import DAO.Personne;
import DAO.Utilisateur;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author shafsia
 */
@Stateful
public class UtilisateurEJB implements UtilisateurEJBLocal {

    @PersistenceContext(name = "AnnuaireEJB-ejbPU")
    private EntityManager em;

    public EntityManager getEm() {
            return em;
    }

    public void setEm(EntityManager em) {
            this.em = em;
    }
    @Override
    public void save(Utilisateur p) {
            em.persist(em.merge(p));
    }

    @Override
    public void update(Utilisateur p) {
            em.merge(p);
    }

    @Override
    public void delete(Utilisateur p) {
            p = em.merge(p);
            em.remove(p);
    }

    @Override
    public Utilisateur findByLogin(String login) {
            return em.find(Utilisateur.class, login);
    }

    @Override
    public Utilisateur findByLoginAndPass(String login, String pass) {
            Utilisateur u = em.find(Utilisateur.class, login);
            if(u!=null)
            if(u.getPass().equals(pass))
                    return u;
            return null;
    }
    
    @Override
    public List<Personne> getAmis(Utilisateur u) {
            return u.getAmis();
    }
    
    @Override
    public List<Personne> findUtilisateurByName(String name)
    {
        Query q = em.createQuery("SELECT Personne FROM Personne WHERE p.nom = ?").setParameter(1,name);
        return q.getResultList();
    }
        
    @Override
    public List<Personne> findUtilisateurByNameAndFName(String name, String fname)
    {
        Query q = em.createQuery("SELECT Personne FROM Personne p WHERE p.nom = ? and p.prenom = ? ").setParameter(1,fname).setParameter(2, name);
        return q.getResultList();
    }
        
    @Override
    public List<Personne> findAmiByName(Utilisateur u, String name)
    {
        ArrayList<Personne> res = new ArrayList<Personne>();
        List<Personne> amis = getAmis(u);

        for(int i=0;i<amis.size();i++)
        {
            Personne tmp = amis.get(i);
            if(name.equals(tmp.getNom()))
                res.add(tmp);
        }

        return res;
    }
        
    @Override
    public List<Personne> findAmiByName(Utilisateur u, String name, String pname)
    {
        List<Personne> res = new ArrayList<Personne>();
        List<Personne> amis = getAmis(u);

        for(int i=0;i<amis.size();i++)
        {
            Personne tmp = amis.get(i);
            if(name.equals(tmp.getNom()) && pname.equals(tmp.getPrenom()))
                res.add(tmp);
        }
    
        return res;
    }
    
    @Override
    public void addAmi(Utilisateur u, Personne ami) {
        u.addAmi(ami);
        update(u);
    }
    
    @Override
    public void deleteAmi(Utilisateur u, Utilisateur ami) {
       //u.deleteAmi(ami);
    }

    @Override
    public void addEnvoiDemande(Utilisateur u, Utilisateur receveur) {
        /*
        u.addDemandeEnvoyee(receveur);
        
        
        
        receveur.addDemandeRecue(u.getMur());
        //System.out.println(u.getDemandesRecues().get(0));
        //System.out.println(receveur.getDemandesRecues().size());
        
        System.out.println(receveur.toString());
        System.out.println(u.toString());
        
        update(u);
        update(receveur);
        *
        */
    }
    
}
